Add OpenNI device

Add a new device that supports depth sensing cameras, ie the Asus Xtion
Pro. These devices produce color images and depth images.

This commit includes both unit tests and a visual test.
Add GLUT include directory to OpenNIVisualTest + Fix for double to float
conversion warning + Change uint (unrecognized) to unsigned int.
Add comment to OpenNI doxygen page about PATH

On Windows, you need to add the OpenNI2 Redist directory to your PATH in
order for the VisualTest and UnitTest to find the OpenNI dll's. This
change adds a comment to the OpenNI documentation about this.
In the OpenNI device rename "image" to "color"

Renamed the images data group entry from "image" to "color" for the rgb
color image provided by the OpenNI device. This makes the distinction
more clear between the other "depth" image.

Also, clarified a couple of comments about converting OpenNI specific
image values to OSS values.
Split Fem2DElementTriangle local & global computation + make local ones virtual

The local mass/stiffness are now split from the global transformation. And the local computations are now virtual methods.
This allows a derive class to extend the model to the drilling dof by simply overriding the computeLocalMass / computeLocalStiffness to complete the matrices with missing parts in the local frame.
Fix Fem2DElementTriangle membrane mass matrix calculation

The membrane mass matrix is defined per axis (no coupling across axis), but was wrongly integrated in the code, creating coupling between the different axis.
Also the membrane only involves the axis X and Y. The axis Z contribution should come from the plate equation, not the membrane.
The reference to Przemieniecki book "Theory of Matrix Structural Analysis" says that the same mass matrix as axis X and Y can be used for the Z axis, but is not correct and can lead to wrong behaviors.
Update debug levels and message in OpenNI device

Change some debugging levels to SEVERE, since they occur when the OpenNI
camera is unusable. Added some debug info to a couple of asserts.

Also, removed a check of how many devices are connected. This was added
for debug purposes and isn't needed.

Added doxygen comment for the return value os
OpenNIDevice::isInitialized
Remove unneeded libs from OpenNI UnitTests

A couple of libs don't need to be explicitly linked into the OpenNI unit
tests.
Move initialization to doInitialize in OpenNIScaffold

Move the sdk initialization into the thread doInitialize. Also, during
registerDevice, start the thread if it hasn't been started, and wait for
it to be initialized before adding the device. This is required becuase
the SDK must be initialized before a new device can be added.
reset datagroup entry in OpenNI if no data

If no data is read from the OpenNI camera, reset the entry in the data
group to indicate the data is invalid. Note, if OpenNI's readFrame does
not return STATUS_OK, this indicates something is wrong, not that there
is no data.
Add NimbleDevice to the devices doxygen page
Merge branch 'master' into feature/device-openni
Update OpenNI with surgsim_add_* changes

Updated OpenNI to use the new signature for surgsim_add_library. Also
use surgsim_add_executable for the visual test.
Merge branch 'feature/device-openni' into 'master'

Depth camera device using OpenNI

Merged-on: https://www.assembla.com/code/OpenSurgSim/git/merge_requests/1189513
Merge branch 'fix/fem2DTriangleMembraneMass' into 'master'

Fix bug in Fem2DTriangle membrane mass matrix

+1: Ryan Beasley, Gughan Sathyaseelan, Paul Novotny

Merged-on: https://www.assembla.com/code/OpenSurgSim/git/merge_requests/1203713
Set default build back to Release builds

It used to be that the default build in non-multiconfiguration
generators (ie, not Visual Studio) was set explicitly to "Release" in
SurgSimBuildFlags. This was removed, because it was thought to be not
neccassary in 7ffda85ee162. But in fact, the default build type in CMake
is Debug. This affected single configuration generators (Make,
NMake, Jom, Ninja, etc).

This change re-adds the setting of CMAKE_BUILD_TYPE to Release if it is
not set. But also checks that it is not a multiconfiguration generator
(NOT CMAKE_CONFIGURATION_TYPES), where this setting is unneccassary (and
conflicts with the way we currently pass the build type in
External_yamlcpp.cmake).
Add Emitter class and 'Particles' data structure

Emitter configurable properties:
1. Shape
2. Emit mode (inside or on surface)
3. Emit rate
4. Lifetime lower/upper bound
5. Velocity lower/upper bound

When calling Emitter::emit(dt), it will generate particles based on
the emit mode and rate, then assign lifetimes and velocities to the
newly created particles in the given range respectively.
Merge branch 'fix/build-type-default' into 'master'

Set default build type back to Release

Merged-on: https://www.assembla.com/code/OpenSurgSim/git/merge_requests/1217113
Add Particles::ParticleSystemRepresentation class

ParticleSystemRepresentation manages:

1. Lifetime of particles, it will mark particles as 'invalid' if their
lifetimes decreased to 0.

2. It owns a set of Emitters, which are used to produce new particles.

3. It also owns a list of invalid particles, for the sake of avoiding
allocating/de-allocating memory frequently.
Merge remote-tracking branch 'origin/feature/particleSystem-Emitter-Particles' into feature/particleSystem-PointGenerators