RAPID - Robust and Accurate Polygon Interface detection
RAPID is a robust and accurate polygon interface detection library for
large environments composed of unstructred models. It is applicable to polygon soups - models which contain no
adjacency information, and obey no topological constraints. The
models may contain cracks, holes, self-intersections, and nongeneric
(e.g. coplanar and collinear) configurations. It is numericaly robust - the algorithm is not subject to
conditioning problems, and requires no special handling of nongeneric
cases (such as parallel faces).
The RAPID library is free for noncommercial use. It has a very simple user
interface: the user needs to be familiar with only about five function
A C++ sample program illustrates its use.
The current version of RAPID is version 2.01. The previous version
was 1.04 - the change in version designation from 1.xx to 2.xx reflects
a moderate alteration in the library's interface (mostly just name
The following changes from version 1.04 have been made:
- Use include file "RAPID.H":
The RAPID API now requires only that you include "RAPID.H" and link
to "libRAPID.a" to be able to use the library.
- Standalone library:
RAPID no longer uses the SVM library. RAPID only depends on
the standard math library, "libm.a", which you probably link to
- Use object "RAPID_model" instead of "box":
The C++ object into which you load polygons is now called
"RAPID_model". Previous versions used "box," which was a holdover
from prerelease implementations, and was not a suitable identifier
for the API.
- Consistent use of "RAPID_" prefix: All the globals,
such as those which began with "OBBT_" now use the prefix "RAPID_".
Note, also, that the old constants "ALL_CONTACTS" and "FIRST_CONTACT"
have been replaced with the symbols "RAPID_ALL_CONSTACTS" and
"RAPID_FIRST_CONTACT" in RAPID 2.00.
- No explicit library initialization: Previous versions
required the client to call 'box::initialize()' before any other RAPID
library call. This was a common but unnecessary source of client bugs
(people forgot to call this routine). RAPID 2.00 no longer requires
this, since all API routines check to see if the library has been
initialized. This extra check has had a negligible performance
- Revision of model construction interface: RAPID 2.00
requires calls to BeginModel() and EndModel() to enclose the
AddTri() calls for building objects. This more resembles the OpenGL
interface, with which many clients will likely be familiar. Generally,
preprocessing of the objects will take place when EndModel() is
called. Later versions of RAPID will allow special procedures to be
placed after the BeginModel() call but before the first AddTri() call
to give the client more control over how the models are preprocessed.
- Faster preprocessing: The preprocessing for RAPID has
been greatly improved in terms of speed. RAPID 2.00 is generally 5
times faster than previous versions in preprocessing models. The
quality of the hierarchies have theoretically been affected, in some
ways for the better and in some ways for the worse, but we have not
conducted a thorough study to gauge overall impact of our changes. In
a later release, we intend to provide an alternative preprocessing
algorithm which will be computationally expensive but which will build
- No support for plain C: Some clients may not consider
this an improvement, but support for plain C has been discontinued.
Of course, clients are still able to construct their own plain C
wrappers for the C++ functions in RAPID. This change has made the
implementation of RAPID more clean.
Download Files (local site)Offical site (form needed to download)
This page last modified on 2008-07-10