BRL-CAD Common Projects
=======================

BRL-CAD is comprised of several projects that have specific
distinguishing qualities of utility that make them interesting
STAND-ALONE projects applicable to a generally WIDE AUDIENCE of users.
These projects are described below:

= Basic Utility and Numerics Libraries (BU+BN) =

BRL-CAD's LIBBU and LIBBN libraries provide an extensive set of
fundamental general routines that form a common simple API for
cross-platform application development.  Some routines are
unparalleled in terms of portability, performance, or simplicity.
Others are more common and undeniably commonplace with alternatives
such as the Apache Portable Runtime (APR).  As a collective API, they
form a solid basis for application development and would probably do
very well in most academic contexts with proper documentation and
examples to follow.

= Benchmark Suite =

The BRL-CAD Benchmark Suite is a system performance analysis benchmark
that tests the performance of a given system's CPU, memory, cache
coherency, kernel context switching, and compiler optimization
capabilities.  The benchmark provides a linearly comparable metric of
overall system performance that may be used to quantitatively evaluate
the relative performance of a given system, particular compilers,
compilation options, and hardware architecture designs.  This
performance test is based on a real-world CPU intensive application of
ray-tracing, providing a reliable metric of actual system performance
that may be compared across more than two decades of computing.

= Geometry Conversion (GCV) =

Included are a variety of importers and exporters for various geometry
file formats (e.g. g-* and *-g).  Exporters include DXF, EUCLID, NFF,
OBJ, STL, TANKILL, VRML, X3D, and OpenGL vertex array buffers.
Importers include CY, DXF, ENF, EUCLID, FAST4, NASTRAN, PLY, STL,
TANKILL, and VIEWPOINT.  BRL-CAD also provides a Unigraphics/NX
exporter application as well as a Pro/Engineer export plug-in.  This
includes LIBGCV.

= Image Conversion (ICV) =

There are many image converters (e.g. pix-*, bw-*, *-pix, *-bw, pix*,
bw*), image processing, and image manipulation tools in the package
that provide basic image management.  The processing tools support
several common formats including PNG, RLE, PPM, PS, and SUN images as
well as a variety of image processing tools that work on raw image
data.  This includes LIBICV.

There are a variety of signal processing utilities (e.g. *mod, ifft,
dfft, s-i, i-d, cv, wavelet) in the package that categorically
manipulate raw data streams according to specified criteria.  These
manipulations include data conversion and filtering capabilities as
well as various transformations including discrete and non-discrete
Fast Fourier transforms (FFT) and wavelet decomposition.  It may make
sense to merge this capability into ICV.

= Network Package Library =

The libpkg Network Package Library (PKG) interface implements a
client-server network connection that multiplexes synchronous and
asynchronous messages across stream connections.  PKG provides a
simple interface for managing client/server connections in a
distributed environment, providing a non-blocking interface that
accepts arbitrary data messages of arbitrary length.

= ttcp =

The "Test Transmission Control Protocol" tool is a network throughput
performance benchmark tool used to evaluate the performance of TCP and
UDP network connections.  TTCP may also be used as an excellent tool
for bootstrapping hosts onto the network by forming a communication
pipe between two machines.  This communication pipe may be used to
transfer files to a remote system that does not otherwise have a means
available to receive files as well as for the evaluation of raw
throughput performance of the network connection between the two
systems.  TTCP includes support for sourcing to/from memory, variable
packet sizes, and loading metrics.  TTCP is described as a standard
testing tool for TCP implementors via Network Working Group RFC 2398.

= Geometry Modeling Kernel =

This product does not yet exist but is a long term goal.  It's
basically several of the core libraries form BRL-CAD's geometry
modeling kernel including the present libbu, libbn, librt, libwdb,
liboptical, libmultispectral, and the ray-trace interface application
back-end.

This modeling kernel provides fundamental geometric representation,
ray-trace analysis, and geometric processing capabilities via a
high-performance procedural C API designed for multithreaded
processing and fast ray-intersection evaluation.

The geometry kernel directly supports the representation and
evaluation of implicit and explicit form primitive objects including
arbitrary polyhedron, toroids, generalized conics, ellipsoids, NURBS,
meshes, parabolics, hyperbolics, and more.  Also supported are
Constructive Solid Geometry (CSG) expressions, boundary representation
(BREP) objects, 2D sketches, 3D extrusions, height fields,
pipe/cabling construction, and more.

= Geometry Engine =

This is a C++ geometry kernel API.  This product is intentionally in a
separate repository so that it's conceptually and technically
implemented on top of BRL-CAD's core libraries.  The design intent is
similar to the ACIS, Granite, and Parasolid geometry modeling APIs.

= Geometry Service =

This is a geometry management network service.  It's a geometry server
with a socket protocol interface that provides user access controls,
versioning, and edit history tracking.  At it's core, application
developers connect to the service for storing and obtaining geometry.
The service supports an extended set of geometry queries.  This
product is similar in design to other network/socket services such as
Apache and MySQL.

= Example Geometry =

BRL-CAD geometry database files are platform independent files that
are used to store solid geometry models.  There are several example
database models that have been made openly available (db/*.g) that
cover a wide range of example solid model geometry including basic
parts, buildings, procedural geometry, and military vehicles.

= Documentation =

Over the years, extensive documentation has been written for BRL-CAD
including many manual pages, quick reference sheets, and a detailed
tutorial series.  The tutorial series covers an introduction to the
package, details on the modeling philosophies, an introduction to the
MGED solid modeler, a more advanced geometry modeling techniques
guide, and provides principles of effective modeling.  The tutorials
take a user through many guided exercises that build upon each other
working towards more complex exercise examples the show some of the
basic modeling and processing capabilities possible.

